package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;
import javax.faces.model.SelectItem;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import muhnes.sizoo.dal.EspecieDao;
import muhnes.sizoo.dal.EspecieDaoImpl;
import muhnes.sizoo.modelo.Especie;
import muhnes.sizoo.dal.GeneroDao;
import muhnes.sizoo.dal.GeneroDaoImpl;
import muhnes.sizoo.modelo.Genero;
/**
 *
 * @author Ricardo Orellana
 */
@ManagedBean(name = "especieBean")
@ViewScoped
public class EspecieBean implements Serializable {
    
    private Especie especie;
    private List<Especie> listaEspecie;
    private List< SelectItem > listaGenero;
    
    public EspecieBean() {
        EspecieDao dao = new EspecieDaoImpl();
        especie = new Especie();
        listaEspecie = dao.buscarTodos();
    }

    public Especie getEspecie() {
        return especie;
    }

    public void setEspecie(Especie especie) {
        this.especie = especie;
    }
    
    public List<Especie> getListaEspecie() {
        if( listaEspecie == null ) {
            EspecieDao dao = new EspecieDaoImpl();
            listaEspecie = dao.buscarTodos();
        }
        return listaEspecie;
    }

    public void setListaEspecie(List<Especie> listaEspecie) {
        this.listaEspecie = listaEspecie;
    }   
    
     public void prepararAdicion( ActionEvent event  ){
        especie = new Especie();
    }
    
    public void prepararModificacion( Especie especie ){
        this.especie = especie;
    }
    
    public void prepararEliminacion( Especie especie ){
        this.especie = especie;
    }
    
    public void agregarEspecie( ActionEvent event ){
        EspecieDaoImpl dao = new EspecieDaoImpl();
        especie.setHabilitado( Boolean.TRUE );
        dao.guardar( especie );
        recrearLista();
    }
    
     public void actualizarEspecie( ActionEvent event ){
        EspecieDaoImpl dao = new EspecieDaoImpl();
        dao.actualizar( especie );
        recrearLista();
    }
    
    public void eliminarEspecie( ActionEvent event ){
        EspecieDaoImpl dao = new EspecieDaoImpl();
        dao.eliminar( especie );
        recrearLista();
    }
    
    
    public List< SelectItem > getListaGenero() {
        if( listaGenero == null ) {
            listaGenero = new ArrayList< SelectItem >();
            GeneroDao dao = new GeneroDaoImpl();
            for( Genero genero : dao.buscarTodos() ) {
                SelectItem item = new SelectItem( genero, genero.getNombre());
                listaGenero.add( item );
            }
        }
        return listaGenero;
    }
    
    void recrearLista() {
        listaEspecie = null;
    }
    
}

